#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QRegularExpression>
#include <QDateTime>
#include <QMessageBox>
#include <QJsonDocument>
#include <QJsonObject>
#include <QValueAxis>
#include <csignal>  // 添加这个头文件
#include <QNetworkInterface>  // 网络接口相关
#include <QHostAddress>       // IP地址处理
#include <QDebug>

void MainWindow::handleCommand301(const QMap<QString, QString> &params, QTcpSocket *client)
{
    /*
    协议规范：
    客户端指令格式: <ID=301><CamID=%s>;
    服务端响应格式:
      1. 先返回确认: <ID=301><INFO=OK>
      2. 实际状态返回:
         <ID=301><INFO=%s><ACTION=DONE><STATUS=%d><CUR_TEM=%f><TEM_STATUS=%d><SENDTIME=...>;
      特殊字段:
        STATUS: 相机状态(0-5)
        TEM_STATUS: 制冷稳定状态(0=不稳定,1=稳定)
    */

    //  参数校验
    if (!params.contains("CamID")) {
        sendResponse("<ID=301><INFO=Error><MSG=Missing_CamID>", client);
        return;
    }

    QString camId = params["CamID"];
    // 1. 发送温度查询指令
    sendCommandToMCU("temp_read");

    // 2. 立即返回确认响应
    sendResponse("<ID=301><INFO=OK>", client);
    // 3. 异步等待温度数据更新后返回最终响应
    QTimer::singleShot(500, [this, client, camId]() {
        //QString response = QString("<ID=301><CamID=%1><INFO=OK><ACTION=DONE><STATUS=%2><CUR_TEM=%3><CUR_VACCUM=%4><TEM_STATUS=%5><SENDTIME=%6>")
        QString response = QString("<ID=301><CamID=%1><INFO=OK><ACTION=DONE><STATUS=%2><CUR_TEM=%3><TEM_STATUS=%4><SENDTIME=%5>")
        .arg(camId)
            .arg(static_cast<int>(hwStatus.cameraState))
            .arg(hwStatus.currentTemp, 0, 'f', 2)  // 使用CCD1-CCD4的平均温度
            //.arg(QString::number(hwStatus.currentVacuum, 'e', 3))
            .arg(hwStatus.tempStabilized ? 1 : 0)
            .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz"));
        sendResponse(response, client);
    });

    // 4. 状态记录（调试用）
    LOG_CAMERA(QString("Camera status query response [Cam:%1][Status:%2][Temp:%3][Stable:%4]")
                   .arg(camId)
                   .arg(hwStatus.cameraState)
                   .arg(hwStatus.currentTemp)
                   .arg(hwStatus.tempStabilized));
}